home *** CD-ROM | disk | FTP | other *** search
-
-
-
- MATH Mathematical Library Procedures MATH
-
-
-
- NNAAMMEE
- math - introduction to mathematical library functions
-
- DDEESSCCRRIIPPTTIIOONN
- These functions constitute the C math library, _l_i_b_m. The
- link editor searches this library under the "-lm" option.
- Declarations for these functions may be obtained from the
- include file <_m_a_t_h._h>. The Fortran math library is
- described in ``man 3f intro''.
-
- LLIISSTT OOFF FFUUNNCCTTIIOONNSS
- _N_a_m_e _A_p_p_e_a_r_s _o_n _P_a_g_e _D_e_s_c_r_i_p_t_i_o_n _E_r_r_o_r _B_o_u_n_d (_U_L_P_s)
- acos sin.3m inverse trigonometric function 3
- acosh asinh.3m inverse hyperbolic function 3
- asin sin.3m inverse trigonometric function 3
- asinh asinh.3m inverse hyperbolic function 3
- atan sin.3m inverse trigonometric function 1
- atanh asinh.3m inverse hyperbolic function 3
- atan2 sin.3m inverse trigonometric function 2
- cabs hypot.3m complex absolute value 1
- cbrt sqrt.3m cube root 1
- ceil floor.3m integer no less than 0
- copysign ieee.3m copy sign bit 0
- cos sin.3m trigonometric function 1
- cosh sinh.3m hyperbolic function 3
- drem ieee.3m remainder 0
- erf erf.3m error function ???
- erfc erf.3m complementary error function ???
- exp exp.3m exponential 1
- expm1 exp.3m exp(x)-1 1
- fabs floor.3m absolute value 0
- floor floor.3m integer no greater than 0
- hypot hypot.3m Euclidean distance 1
- infnan infnan.3m signals exceptions
- j0 j0.3m bessel function ???
- j1 j0.3m bessel function ???
- jn j0.3m bessel function ???
- lgamma lgamma.3m log gamma function; (formerly gamma.3m)
- log exp.3m natural logarithm 1
- logb ieee.3m exponent extraction 0
- log10 exp.3m logarithm to base 10 3
- log1p exp.3m log(1+x) 1
- pow exp.3m exponential x**y 60-500
- rint floor.3m round to nearest integer 0
- scalb ieee.3m exponent adjustment 0
- sin sin.3m trigonometric function 1
- sinh sinh.3m hyperbolic function 3
- sqrt sqrt.3m square root 1
- tan sin.3m trigonometric function 3
- tanh sinh.3m hyperbolic function 3
- y0 j0.3m bessel function ???
- y1 j0.3m bessel function ???
-
-
-
- Sprite v1.0 May 27, 1986 1
-
-
-
-
-
-
- MATH Mathematical Library Procedures MATH
-
-
-
- yn j0.3m bessel function ???
-
- NNOOTTEESS
- In 4.3 BSD, distributed from the University of California in
- late 1985, most of the foregoing functions come in two ver-
- sions, one for the double-precision "D" format in the DEC
- VAX-11 family of computers, another for double-precision
- arithmetic conforming to the IEEE Standard 754 for Binary
- Floating-Point Arithmetic. The two versions behave very
- similarly, as should be expected from programs more accurate
- and robust than was the norm when UNIX was born. For
- instance, the programs are accurate to within the numbers of
- _u_l_ps tabulated above; an _u_l_p is one _Unit in the _Last _Place.
- And the programs have been cured of anomalies that afflicted
- the older math library _l_i_b_m in which incidents like the fol-
- lowing had been reported:
- sqrt(-1.0) = 0.0 and log(-1.0) = -1.7e38.
- cos(1.0e-11) > cos(0.0) > 1.0.
- pow(x,1.0) != x when x = 2.0, 3.0, 4.0, ..., 9.0.
- pow(-1.0,1.0e10) trapped on Integer Overflow.
- sqrt(1.0e30) and sqrt(1.0e-30) were very slow.
- However the two versions do differ in ways that have to be
- explained, to which end the following notes are provided.
-
- DDEECC VVAAXX--1111 DD__ffllooaattiinngg--ppooiinntt::
-
- This is the format for which the original math library _l_i_b_m
- was developed, and to which this manual is still principally
- dedicated. It is _t_h_e double-precision format for the PDP-11
- and the earlier VAX-11 machines; VAX-11s after 1983 were
- provided with an optional "G" format closer to the IEEE
- double-precision format. The earlier DEC MicroVAXs have no
- D format, only G double-precision. (Why? Why not?)
-
- Properties of D_floating-point:
- Wordsize: 64 bits, 8 bytes. Radix: Binary.
- Precision: 56 sig. bits, roughly like 17 sig.
- decimals.
- If x and x' are consecutive positive
- D_floating-point numbers (they differ by 1 _u_l_p),
- then
- 1.3e-17 < 0.5**56 < (x'-x)/x <_ 0.5**55 < 2.8e-17.
- Range: Overflow threshold = 2.0**127 = 1.7e38.
- Underflow threshold = 0.5**128 = 2.9e-39.
- NOTE: THIS RANGE IS COMPARATIVELY NARROW.
- Overflow customarily stops computation.
- Underflow is customarily flushed quietly to zero.
- CAUTION:
- It is possible to have x != y and yet x-y = 0
- because of underflow. Similarly x > y > 0
- cannot prevent either x*y = 0 or y/x = 0
- from happening without warning.
-
-
-
- Sprite v1.0 May 27, 1986 2
-
-
-
-
-
-
- MATH Mathematical Library Procedures MATH
-
-
-
- Zero is represented ambiguously.
- Although 2**55 different representations of zero
- are accepted by the hardware, only the obvious
- representation is ever produced. There is no -0
- on a VAX.
- Infinity is not part of the VAX architecture.
- Reserved operands:
- of the 2**55 that the hardware recognizes, only
- one of them is ever produced. Any floating-point
- operation upon a reserved operand, even a MOVF or
- MOVD, customarily stops computation, so they are
- not much used.
- Exceptions:
- Divisions by zero and operations that overflow are
- invalid operations that customarily stop computa-
- tion or, in earlier machines, produce reserved
- operands that will stop computation.
- Rounding:
- Every rational operation (+, -, *, /) on a VAX
- (but not necessarily on a PDP-11), if not an
- over/underflow nor division by zero, is rounded to
- within half an _u_l_p, and when the rounding error is
- exactly half an _u_l_p then rounding is away from 0.
-
- Except for its narrow range, D_floating-point is one of the
- better computer arithmetics designed in the 1960's. Its
- properties are reflected fairly faithfully in the elementary
- functions for a VAX distributed in 4.3 BSD. They
- over/underflow only if their results have to lie out of
- range or very nearly so, and then they behave much as any
- rational arithmetic operation that over/underflowed would
- behave. Similarly, expressions like log(0) and atanh(1)
- behave like 1/0; and sqrt(-3) and acos(3) behave like 0/0;
- they all produce reserved operands and/or stop computation!
- The situation is described in more detail in manual pages.
- _T_h_i_s _r_e_s_p_o_n_s_e _s_e_e_m_s _e_x_c_e_s_s_i_v_e_l_y _p_u_n_i_t_i_v_e, _s_o _i_t _i_s
- _d_e_s_t_i_n_e_d _t_o _b_e _r_e_p_l_a_c_e_d _a_t _s_o_m_e _t_i_m_e _i_n _t_h_e _f_o_r_e_-
- _s_e_e_a_b_l_e _f_u_t_u_r_e _b_y _a _m_o_r_e _f_l_e_x_i_b_l_e _b_u_t _s_t_i_l_l _u_n_i_-
- _f_o_r_m _s_c_h_e_m_e _b_e_i_n_g _d_e_v_e_l_o_p_e_d _t_o _h_a_n_d_l_e _a_l_l
- _f_l_o_a_t_i_n_g-_p_o_i_n_t _a_r_i_t_h_m_e_t_i_c _e_x_c_e_p_t_i_o_n_s _n_e_a_t_l_y. _S_e_e
- _i_n_f_n_a_n(_3_M) _f_o_r _t_h_e _p_r_e_s_e_n_t _s_t_a_t_e _o_f _a_f_f_a_i_r_s.
-
- How do the functions in 4.3 BSD's new _l_i_b_m for UNIX compare
- with their counterparts in DEC's VAX/VMS library? Some of
- the VMS functions are a little faster, some are a little
- more accurate, some are more puritanical about exceptions
- (like pow(0.0,0.0) and atan2(0.0,0.0)), and most occupy much
- more memory than their counterparts in _l_i_b_m. The VMS codes
- interpolate in large table to achieve speed and accuracy;
- the _l_i_b_m codes use tricky formulas compact enough that all
- of them may some day fit into a ROM.
-
-
-
-
- Sprite v1.0 May 27, 1986 3
-
-
-
-
-
-
- MATH Mathematical Library Procedures MATH
-
-
-
- More important, DEC regards the VMS codes as proprietary and
- guards them zealously against unauthorized use. But the
- _l_i_b_m codes in 4.3 BSD are intended for the public domain;
- they may be copied freely provided their provenance is
- always acknowledged, and provided users assist the authors
- in their researches by reporting experience with the codes.
- Therefore no user of UNIX on a machine whose arithmetic
- resembles VAX D_floating-point need use anything worse than
- the new _l_i_b_m.
-
- IIEEEEEE SSTTAANNDDAARRDD 775544 FFllooaattiinngg--PPooiinntt AArriitthhmmeettiicc::
-
- This standard is on its way to becoming more widely adopted
- than any other design for computer arithmetic. VLSI chips
- that conform to some version of that standard have been pro-
- duced by a host of manufacturers, among them ...
- Intel i8087, i80287 National Semiconductor 32081
- Motorola 68881 Weitek WTL-1032, ... , -1165
- Zilog Z8070 Western Electric (AT&T) WE32106.
- Other implementations range from software, done thoroughly
- in the Apple Macintosh, through VLSI in the Hewlett-Packard
- 9000 series, to the ELXSI 6400 running ECL at 3 Megaflops.
- Several other companies have adopted the formats of IEEE 754
- without, alas, adhering to the standard's way of handling
- rounding and exceptions like over/underflow. The DEC VAX
- G_floating-point format is very similar to the IEEE 754 Dou-
- ble format, so similar that the C programs for the IEEE ver-
- sions of most of the elementary functions listed above could
- easily be converted to run on a MicroVAX, though nobody has
- volunteered to do that yet.
-
- The codes in 4.3 BSD's _l_i_b_m for machines that conform to
- IEEE 754 are intended primarily for the National Semi. 32081
- and WTL 1164/65. To use these codes with the Intel or Zilog
- chips, or with the Apple Macintosh or ELXSI 6400, is to
- forego the use of better codes provided (perhaps freely) by
- those companies and designed by some of the authors of the
- codes above. Except for _a_t_a_n, _c_a_b_s, _c_b_r_t, _e_r_f, _e_r_f_c, _h_y_p_o_t,
- _j_0-_j_n, _l_g_a_m_m_a, _p_o_w and _y_0-_y_n, the Motorola 68881 has all the
- functions in _l_i_b_m on chip, and faster and more accurate; it,
- Apple, the i8087, Z8070 and WE32106 all use 64 sig. bits.
- The main virtue of 4.3 BSD's _l_i_b_m codes is that they are
- intended for the public domain; they may be copied freely
- provided their provenance is always acknowledged, and pro-
- vided users assist the authors in their researches by
- reporting experience with the codes. Therefore no user of
- UNIX on a machine that conforms to IEEE 754 need use any-
- thing worse than the new _l_i_b_m.
-
- Properties of IEEE 754 Double-Precision:
- Wordsize: 64 bits, 8 bytes. Radix: Binary.
- Precision: 53 sig. bits, roughly like 16 sig.
-
-
-
- Sprite v1.0 May 27, 1986 4
-
-
-
-
-
-
- MATH Mathematical Library Procedures MATH
-
-
-
- decimals.
- If x and x' are consecutive positive
- Double-Precision numbers (they differ by 1 _u_l_p),
- then
- 1.1e-16 < 0.5**53 < (x'-x)/x <_ 0.5**52 < 2.3e-16.
- Range: Overflow threshold = 2.0**1024 = 1.8e308
- Underflow threshold = 0.5**1022 = 2.2e-308
- Overflow goes by default to a signed Infinity.
- Underflow is _G_r_a_d_u_a_l, rounding to the nearest
- integer multiple of 0.5**1074 = 4.9e-324.
- Zero is represented ambiguously as +0 or -0.
- Its sign transforms correctly through multiplica-
- tion or division, and is preserved by addition of
- zeros with like signs; but x-x yields +0 for every
- finite x. The only operations that reveal zero's
- sign are division by zero and copysign(x,+_0). In
- particular, comparison (x > y, x >_ y, etc.) cannot
- be affected by the sign of zero; but if finite x =
- y then Infinity = 1/(x-y) != -1/(y-x) = -Infinity.
- Infinity is signed.
- it persists when added to itself or to any finite
- number. Its sign transforms correctly through
- multiplication and division, and
- (finite)/+_Infinity = +_0 (nonzero)/0 = +_Infinity.
- But Infinity-Infinity, Infinity*0 and
- Infinity/Infinity are, like 0/0 and sqrt(-3),
- invalid operations that produce _N_a_N. ...
- Reserved operands:
- there are 2**53-2 of them, all called _N_a_N (_Not _a
- _Number). Some, called Signaling _N_a_Ns, trap any
- floating-point operation performed upon them; they
- are used to mark missing or uninitialized values,
- or nonexistent elements of arrays. The rest are
- Quiet _N_a_Ns; they are the default results of
- Invalid Operations, and propagate through subse-
- quent arithmetic operations. If x != x then x is
- _N_a_N; every other predicate (x > y, x = y, x < y,
- ...) is FALSE if _N_a_N is involved.
- NOTE: Trichotomy is violated by _N_a_N.
- Besides being FALSE, predicates that entail
- ordered comparison, rather than mere
- (in)equality, signal Invalid Operation when
- _N_a_N is involved.
- Rounding:
- Every algebraic operation (+, -, *, /, sqrt) is
- rounded by default to within half an _u_l_p, and when
- the rounding error is exactly half an _u_l_p then the
- rounded value's least significant bit is zero.
- This kind of rounding is usually the best kind,
- sometimes provably so; for instance, for every x =
- 1.0, 2.0, 3.0, 4.0, ..., 2.0**52, we find
- (x/3.0)*3.0 == x and (x/10.0)*10.0 == x and ...
-
-
-
- Sprite v1.0 May 27, 1986 5
-
-
-
-
-
-
- MATH Mathematical Library Procedures MATH
-
-
-
- despite that both the quotients and the products
- have been rounded. Only rounding like IEEE 754
- can do that. But no single kind of rounding can
- be proved best for every circumstance, so IEEE 754
- provides rounding towards zero or towards +Infin-
- ity or towards -Infinity at the programmer's
- option. And the same kinds of rounding are speci-
- fied for Binary-Decimal Conversions, at least for
- magnitudes between roughly 1.0e-10 and 1.0e37.
- Exceptions:
- IEEE 754 recognizes five kinds of floating-point
- exceptions, listed below in declining order of
- probable importance.
- Exception Default Result
- __________________________________________
- Invalid Operation _N_a_N, or FALSE
- Overflow +_Infinity
- Divide by Zero +_Infinity
- Underflow Gradual Underflow
- Inexact Rounded value
- NOTE: An Exception is not an Error unless handled
- badly. What makes a class of exceptions excep-
- tional is that no single default response can be
- satisfactory in every instance. On the other
- hand, if a default response will serve most
- instances satisfactorily, the unsatisfactory
- instances cannot justify aborting computation
- every time the exception occurs.
-
- For each kind of floating-point exception, IEEE 754
- provides a Flag that is raised each time its exception
- is signaled, and stays raised until the program resets
- it. Programs may also test, save and restore a flag.
- Thus, IEEE 754 provides three ways by which programs
- may cope with exceptions for which the default result
- might be unsatisfactory:
-
- 1) Test for a condition that might cause an exception
- later, and branch to avoid the exception.
-
- 2) Test a flag to see whether an exception has
- occurred since the program last reset its flag.
-
- 3) Test a result to see whether it is a value that
- only an exception could have produced.
- CAUTION: The only reliable ways to discover whether
- Underflow has occurred are to test whether products
- or quotients lie closer to zero than the underflow
- threshold, or to test the Underflow flag. (Sums
- and differences cannot underflow in IEEE 754; if x
- != y then x-y is correct to full precision and cer-
- tainly nonzero regardless of how tiny it may be.)
-
-
-
- Sprite v1.0 May 27, 1986 6
-
-
-
-
-
-
- MATH Mathematical Library Procedures MATH
-
-
-
- Products and quotients that underflow gradually can
- lose accuracy gradually without vanishing, so com-
- paring them with zero (as one might on a VAX) will
- not reveal the loss. Fortunately, if a gradually
- underflowed value is destined to be added to some-
- thing bigger than the underflow threshold, as is
- almost always the case, digits lost to gradual
- underflow will not be missed because they would
- have been rounded off anyway. So gradual under-
- flows are usually _p_r_o_v_a_b_l_y ignorable. The same
- cannot be said of underflows flushed to 0.
-
- At the option of an implementor conforming to IEEE 754,
- other ways to cope with exceptions may be provided:
-
- 4) ABORT. This mechanism classifies an exception in
- advance as an incident to be handled by means trad-
- itionally associated with error-handling statements
- like "ON ERROR GO TO ...". Different languages
- offer different forms of this statement, but most
- share the following characteristics:
-
- - No means is provided to substitute a value for the
- offending operation's result and resume computation
- from what may be the middle of an expression. An
- exceptional result is abandoned.
-
- - In a subprogram that lacks an error-handling state-
- ment, an exception causes the subprogram to abort
- within whatever program called it, and so on back
- up the chain of calling subprograms until an
- error-handling statement is encountered or the
- whole task is aborted and memory is dumped.
-
- 5) STOP. This mechanism, requiring an interactive
- debugging environment, is more for the programmer
- than the program. It classifies an exception in
- advance as a symptom of a programmer's error; the
- exception suspends execution as near as it can to
- the offending operation so that the programmer can
- look around to see how it happened. Quite often
- the first several exceptions turn out to be quite
- unexceptionable, so the programmer ought ideally to
- be able to resume execution after each one as if
- execution had not been stopped.
-
- 6) ... Other ways lie beyond the scope of this docu-
- ment.
-
- The crucial problem for exception handling is the problem of
- Scope, and the problem's solution is understood, but not
- enough manpower was available to implement it fully in time
-
-
-
- Sprite v1.0 May 27, 1986 7
-
-
-
-
-
-
- MATH Mathematical Library Procedures MATH
-
-
-
- to be distributed in 4.3 BSD's _l_i_b_m. Ideally, each elemen-
- tary function should act as if it were indivisible, or
- atomic, in the sense that ...
-
- i) No exception should be signaled that is not deserved
- by the data supplied to that function.
-
- ii) Any exception signaled should be identified with that
- function rather than with one of its subroutines.
-
- iii) The internal behavior of an atomic function should not
- be disrupted when a calling program changes from one
- to another of the five or so ways of handling excep-
- tions listed above, although the definition of the
- function may be correlated intentionally with excep-
- tion handling.
-
- Ideally, every programmer should be able _c_o_n_v_e_n_i_e_n_t_l_y to
- turn a debugged subprogram into one that appears atomic to
- its users. But simulating all three characteristics of an
- atomic function is still a tedious affair, entailing hosts
- of tests and saves-restores; work is under way to ameliorate
- the inconvenience.
-
- Meanwhile, the functions in _l_i_b_m are only approximately
- atomic. They signal no inappropriate exception except pos-
- sibly ...
- Over/Underflow
- when a result, if properly computed, might have
- lain barely within range, and
- Inexact in _c_a_b_s, _c_b_r_t, _h_y_p_o_t, _l_o_g_1_0 and _p_o_w
- when it happens to be exact, thanks to fortuitous
- cancellation of errors.
- Otherwise, ...
- Invalid Operation is signaled only when
- any result but _N_a_N would probably be misleading.
- Overflow is signaled only when
- the exact result would be finite but beyond the
- overflow threshold.
- Divide-by-Zero is signaled only when
- a function takes exactly infinite values at finite
- operands.
- Underflow is signaled only when
- the exact result would be nonzero but tinier than
- the underflow threshold.
- Inexact is signaled only when
- greater range or precision would be needed to
- represent the exact result.
-
- BBUUGGSS
- When signals are appropriate, they are emitted by certain
- operations within the codes, so a subroutine-trace may be
-
-
-
- Sprite v1.0 May 27, 1986 8
-
-
-
-
-
-
- MATH Mathematical Library Procedures MATH
-
-
-
- needed to identify the function with its signal in case
- method 5) above is in use. And the codes all take the IEEE
- 754 defaults for granted; this means that a decision to trap
- all divisions by zero could disrupt a code that would other-
- wise get correct results despite division by zero.
-
- SSEEEE AALLSSOO
- An explanation of IEEE 754 and its proposed extension p854
- was published in the IEEE magazine MICRO in August 1984
- under the title "A Proposed Radix- and
- Word-length-independent Standard for Floating-point Arith-
- metic" by W. J. Cody et al. The manuals for Pascal, C and
- BASIC on the Apple Macintosh document the features of IEEE
- 754 pretty well. Articles in the IEEE magazine COMPUTER
- vol. 14 no. 3 (Mar. 1981), and in the ACM SIGNUM Newsletter
- Special Issue of Oct. 1979, may be helpful although they
- pertain to superseded drafts of the standard.
-
- AAUUTTHHOORR
- W. Kahan, with the help of Z-S. Alex Liu, Stuart I.
- McDonald, Dr. Kwok-Choi Ng, Peter Tang.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sprite v1.0 May 27, 1986 9
-
-
-
-